package com.lcp.se.controller;

import com.lcp.se.entity.result.Result;
import com.lcp.se.entity.vo.AuthVO;
import com.lcp.se.service.AppletUserService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * 用户登录、注册、信息更新
 *
 * @author lcp
 * @date 2020/7/16 10:53
 */
@RestController
@RequestMapping("/user/applet")
public class AppletUserController {
    @Resource
    private AppletUserService appletUserService;

    /**
     * 小程序用户登录
     *
     * @param code 临时登录凭证，通过 wx.login 可以获得
     * @return 登陆结果（包括 sessionId，userInfo）
     */
    @PostMapping("/login")
    public Result<AuthVO> login(@RequestParam(value = "code") String code) {
        return appletUserService.login(code);
    }

    /**
     * 更新用户手机号
     *
     * @param encryptedData 包括用户手机号的加密数据
     * @param iv            加密算法的初始向量
     * @param sessionId     用户访问凭证
     * @param openId        用户唯一标识
     * @return 更新结果
     */
    @PostMapping(path = "/update/phone")
    public Result<String> updatePhoneNumber(@RequestParam(value = "encryptedData") String encryptedData,
                                            @RequestParam(value = "iv") String iv,
                                            @RequestHeader(value = "sessionId") String sessionId,
                                            @RequestHeader(value = "openId") String openId) {
        return appletUserService.updatePhoneNumber(encryptedData, iv, sessionId, openId);
    }

    /**
     * 更新小程序用户信息
     *
     * @param encryptedData 包括敏感数据在内的完整用户信息的加密数据
     * @param iv            加密算法的初始向量
     * @param sessionId     用户访问凭证
     * @param openId        用户唯一标识
     * @return 更新结果
     */
    @PostMapping("/update/info")
    public Result<String> updateUserInfo(@RequestParam(value = "encryptedData") String encryptedData,
                                         @RequestParam(value = "iv") String iv,
                                         @RequestHeader(value = "sessionId") String sessionId,
                                         @RequestHeader(value = "openId") String openId) {
        return appletUserService.updateUserInfo(encryptedData, iv, sessionId, openId);
    }

    /**
     * 更新小程序用户类型
     *
     * @param userType 用户类型
     * @param openId   用户唯一标识
     * @return 更新结果
     */
    @PostMapping("/update/type")
    public Result<String> updateUserType(@RequestParam(value = "userType") Integer userType,
                                         @RequestHeader(value = "openId") String openId) {
        return appletUserService.updateUserType(userType, openId);
    }
}
